# 指定基本Docker映像。你可以阅读更多关于
# 可供浏览的图片 https://crawlee.dev/docs/guides/docker-images
# 您也可以使用Docker Hub中的任何其他图像。
FROM apify/actor-node-playwright-chrome:18 AS builder

# 仅复制 package.json 和 package-lock.json，使用 Docker 层缓存加速构建。
COPY --chown=myuser package*.json ./

# 安装所有依赖项，不要审核以加快安装速度。
RUN npm install --include=dev --audit=false

# 接下来，在基本图像中使用用户集复制源文件。
COPY --chown=myuser . ./

# 安装所有依赖项并生成项目，不要审核以加快安装速度。
RUN npm run build

# 创建最终图像
FROM apify/actor-node-playwright-chrome:18

# 仅从生成器映像复制已构建的JS文件
COPY --from=builder --chown=myuser /home/myuser/dist ./dist

# 仅复制 package.json 和 package-lock.json，使用 Docker 层缓存加速构建。
COPY --chown=myuser package*.json ./

# 安装 NPM 包，跳过可选和开发依赖项，保持图像较小，避免记录太多用于调试的树并打印依赖项，
RUN npm --quiet set progress=false \
    && npm install --omit=dev --omit=optional \
    && echo "Installed NPM packages:" \
    && (npm list --omit=dev --all || true) \
    && echo "Node.js version:" \
    && node --version \
    && echo "NPM version:" \
    && npm --version

# 接下来，复制剩余的文件和目录以及源代码。
# 由于我们在 NPM 安装后执行此操作，因此快速构建会非常快
# 对于大多数源文件更改。
COPY --chown=myuser . ./

# 运行图像。如果你知道你不需要有头浏览器，您可以删除 XVFB 启动脚本以获得微性能增益。
CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod:prepare-queue --silent && npm run start:prod:scrape-store --silent